/**
 * 模板项类型选择
 * 
 * @param {}
 *            tn 模板项关联表名称
 * @param {}
 *            tp 模板项关联字段类型
 * @param {}
 *            itp 模板项类型
 * @return {}
 */
function getItemOptions(tn, tp, itp) {
	var tpscript = '';

	if (tn == 'APP_GDZC_VARCHAR') {
		tpscript += '<option value="text" ' + (itp == 'text' ? 'selected' : '')
				+ '>单行文本</option>';
		tpscript += '<option value="textarea" '
				+ (itp == 'textarea' ? 'selected' : '') + '>多行文本</option>';
		tpscript += '<option value="date" ' + (itp == 'date' ? 'selected' : '')
				+ '>日期</option>';
		tpscript += '<option value="time" ' + (itp == 'time' ? 'selected' : '')
				+ '>时间</option>';
		tpscript += '<option value="radio" '
				+ (itp == 'radio' ? 'selected' : '') + '>单选框</option>';
		tpscript += '<option value="checkbox" '
				+ (itp == 'checkbox' ? 'selected' : '') + '>复选框</option>';
	} else if (tn == 'APP_GDZC_INTEGER' || tn == 'APP_GDZC_FLOAT') {
		tpscript += '<option value="text" ' + (itp == 'text' ? 'selected' : '')
				+ '>单文本</option>';
	} else if (tn == 'APP_GDZC_CLOB') {
		tpscript += '<option value="textarea" '
				+ (itp == 'textarea' ? 'selected' : '') + '>多行文本</option>';
	} else if (tn == 'APP_GDZC_FILE') {
		tpscript += '<option value="file" '
				+ (itp == 'annex' ? 'selected' : '') + '>附件选择</option>';
	} else if (tn == 'APP_GDZC_OBJECT') {
		tpscript += '<option value="objectquery" '
				+ (itp == 'objectquery' ? 'selected' : '') + '>对象选择</option>';
		tpscript += '<option value="guselect" '
				+ (itp == 'guselect' ? 'selected' : '')
				+ '>组/用户选择(单选)</option>';
		tpscript += '<option value="gselect" '
				+ (itp == 'gselect' ? 'selected' : '') + '>组选择(单选)</option>';
		tpscript += '<option value="uselect" '
				+ (itp == 'uselect' ? 'selected' : '') + '>用户选择(单选)</option>';
		tpscript += '<option value="guselect1" '
				+ (itp == 'guselect1' ? 'selected' : '')
				+ '>组/用户选择(多选)</option>';
		tpscript += '<option value="gselect1" '
				+ (itp == 'gselect1' ? 'selected' : '') + '>组选择(多选)</option>';
		tpscript += '<option value="uselect1" '
				+ (itp == 'uselect1' ? 'selected' : '') + '>用户选择(多选)</option>';
		tpscript += '<option value="roleselect" '
				+ (itp == 'roleselect' ? 'selected' : '')
				+ '>角色选择(单选)</option>';
		tpscript += '<option value="roleselect1" '
				+ (itp == 'roleselect1' ? 'selected' : '')
				+ '>角色选择(多选)</option>';
	} else if (tn == 'APP_GDZC_WORDBOOK') {
		tpscript += '<option value="select" '
				+ (itp == 'select' ? 'selected' : '') + '>数据字典选择</option>';
	} else if (tn == 'APP_GDZC_DATAINDEX') {
		tpscript += '<option value="dataindex" '
				+ (itp == 'dataindex' ? 'selected' : '') + '>数据类别选择</option>';
	} else if (tn == 'APP_GDZC_TABLEQUERY') {
		tpscript += '<option value="tablequery" '
				+ (itp == 'tablequery' ? 'selected' : '') + '>表选择</option>';
	}

	return tpscript;
}

/**
 * 通用模板项
 * 
 * @param {}
 *            tn
 * @param {}
 *            name
 * @param {}
 *            tp
 * @param {}
 *            itp
 * @return {}
 */
function getCommonItemOptions(tn, name, tp, itp) {
	var tpscript = '';

	if (name == 'SCDATE' || name == 'CCDATE' || name == 'IVDATE'
			|| name == 'WRDATE') {
		tpscript += '<option value="date" ' + (itp == 'date' ? 'selected' : '')
				+ '>日期</option>';
		tpscript += '<option value="time" ' + (itp == 'time' ? 'selected' : '')
				+ '>时间</option>';
	} else {
		tpscript += '<option value="text" ' + (itp == 'text' ? 'selected' : '')
				+ '>单文本</option>';
		tpscript += '<option value="textarea" '
				+ (itp == 'textarea' ? 'selected' : '') + '>多行文本</option>';
	}

	return tpscript;
}

var templateItemMap = new HashMap();

/**
 * 添加资产属性模板项
 * 
 * @param {}
 *            title
 * @param {}
 *            tp
 */
function addItem(title, area, propkey) {
	var tabs = new Ext.TabPanel({
				id : 'tabs',
				region : 'center', // a center region is ALWAYS
				// required for border layout
				closable : false,
				resizeTabs : true,
				minTabWidth : 135,
				tabWidth : 135,
				deferredRender : false,
				enableTabScroll : true,
				margins : '0 0 0 0',
				items : []

			});

	var win = new Ext.Window({
		title : '<font class="oaFont">' + title + '_模板项定义</font>',
		layout : 'fit',
		items : [tabs],
		plain : true,
		modal : true,
		width : 600,
		height : 500,
		listeners : {
			'show' : function() {
				// var item0 = getItemListTab('APP_GDZC_BASE');

				var item1 = getItemListTab('APP_GDZC_VARCHAR', '字符');
				tabs.add(item1);

				var item2 = getItemListTab('APP_GDZC_INTEGER', '整数');
				tabs.add(item2);

				var item3 = getItemListTab('APP_GDZC_FLOAT', '浮点数');
				tabs.add(item3);

				var item4 = getItemListTab('APP_GDZC_CLOB', '大文本');
				tabs.add(item4);

				var item5 = getItemListTab('APP_GDZC_FILE', '文件附件');
				tabs.add(item5);

				var item6 = getItemListTab('APP_GDZC_OBJECT', '对象');
				tabs.add(item6);

				var item7 = getItemListTab('APP_GDZC_WORDBOOK', '数据字典');
				tabs.add(item7);

				var item8 = getItemListTab('APP_GDZC_DATAINDEX', '数据类别');
				tabs.add(item8);

				var item9 = getItemListTab('APP_GDZC_TABLEQUERY', '数据表');
				tabs.add(item9);

				tabs.setActiveTab('APP_GDZC_VARCHAR');
			}
		},
		buttons : [{
			text : '<font class="oaFont">确定</font>',
			handler : function() {
				returnSelectedItem('APP_GDZC_VARCHAR', area, title, propkey);
				returnSelectedItem('APP_GDZC_INTEGER', area, title, propkey);
				returnSelectedItem('APP_GDZC_FLOAT', area, title, propkey);
				returnSelectedItem('APP_GDZC_CLOB', area, title, propkey);
				returnSelectedItem('APP_GDZC_FILE', area, title, propkey);
				returnSelectedItem('APP_GDZC_OBJECT', area, title, propkey);
				returnSelectedItem('APP_GDZC_WORDBOOK', area, title, propkey);
				returnSelectedItem('APP_GDZC_DATAINDEX', area, title, propkey);
				returnSelectedItem('APP_GDZC_TABLEQUERY', area, title, propkey);

				win.close();
				win = null;
			}
		}, {
			text : '<font class="oaFont">取消</font>',
			handler : function() {
				win.close();
				win = null;
			}
		}]
	});

	win.show(this);
}

/**
 * 
 * @param {}
 *            tabid
 * @return {}
 */
function getItemListTab(tabid, title) {
	var store = new Ext.data.JsonStore({
				idProperty : 'name',
				remoteSort : false,
				totalProperty : 'totalCount',
				root : 'columnList',
				autoLoad : false,
				fields : ['name', 'memo', 'tp'],

				// load using script tags for cross domain, if the data in on
				// the same domain as
				// this page, an HttpProxy would be better
				proxy : new Ext.data.ScriptTagProxy({
							url : context
									+ '/app/gdzctemplate.do?method=loaditem&tn='
									+ tabid
						})
			});

	var sm = new Ext.grid.CheckboxSelectionModel({
				handleMouseDown : Ext.emptyFn,
				listeners : {
					'beforerowselect' : function(SelectionModel, rowIndex,
							keepExisting, record) {
						var isMatch = templateItemMap.containsKey(grid.id + '.'
								+ record.data.name);
						if (isMatch) { // 用户状态不正常

							Ext.Msg.alert('提示信息', '该数据项已经被占用，不能重复使用!');
							return false;
						} else {
							return true;
						}
					}
				}

			});

	sm.handleMouseDown = Ext.emptyFn;

	var grid = new Ext.grid.GridPanel({
				id : tabid,
				store : store,
				closable : false,
				columns : [sm, {
							header : '字段名称',
							width : 150,
							sortable : true,
							dataIndex : 'name'
						}, {
							header : '字段描述',
							width : 150,
							sortable : true,
							dataIndex : 'memo'
						}, {
							header : '字段类型',
							width : 150,
							sortable : false,
							dataIndex : 'tp'
						}],
				sm : sm,
				stripeRows : false,
				autoExpandColumn : 'name',
				title : '<font class="oaFont">' + title + '</font>',
				border : false,
				viewConfig : {
					forceFit : true,
					getRowClass : function(record, rowIndex, rowParams, store) {
						var isMatch = templateItemMap.containsKey(grid.id + '.'
								+ record.data.name);
						if (isMatch) {
							return 'row0';
						} else {
							return 'row1';
						}
					}
				},
				// config options for stateful behavior
				stateful : true,
				stateId : 'grid',
				loadMask : {
					msg : "数据加载中，请稍等..."
				},
				bbar : new Ext.Toolbar([{
							iconCls : 'refresh',
							text : '<font class="oaFont">刷新</font>',
							handler : function() {
								grid.getStore().reload();
							}
						}]),
				listeners : {
					activate : function() {
						handleActivateTab(store, grid, sm)
					}
				}
			});

	// tableListGrid.setIconClass('tabs');
	return grid;
}

function handleActivateTab(store, grid, sm) {
	if (store.getCount() <= 0) {
		store.load({
					params : {},
					callback : function(r, options, success) {
						if (success == false) {
							Ext.Msg.alert('ERROR', '加载数据出现异常.');
						} else {
						}
					}
				});

		/*
		 * store.on('load', function(store, records, options) { var arr = [];
		 * for (var i = 0; i < records.length; i++) { var record = records[i];
		 * 
		 * var isMatch = templateItemMap.containsKey(grid.id + '_' +
		 * record.data.name); if (isMatch) { arr.push(record); } }
		 * 
		 * sm.selectRecords(arr); }, this, { delay : 1000 })
		 */
	}
}

/**
 * 详细设置模板项
 * 
 * @param {}
 *            itemid
 */
function editItem(itemid, lbl) {
	var tckGroups = new Ext.form.CheckboxGroup({
				fieldLabel : '值校验',
				// //RadioGroup.fieldLabel 标签与
				// Radio.boxLabel 标签区别
				// width : "200",
				// hideLabel : true, // 隐藏RadioGroup标签
				items : [new Ext.form.Checkbox({ // 三个必须项
					id : 'tck0',
					// checked : true, //
					// 设置当前为选中状态,仅且一个为选中.
					boxLabel : '非空校验', // Radio标签
					name : 'tck0', // 用于form提交时传送的参数名
					inputValue : '1', // 提交时传送的参数值
					listeners : {
						check : function(checkbox, checked) { // 选中时,调用的事件
							if (checked) {

							}
						}
					}
				})]
			});

	if ($(itemid).getAttribute('columnType') == 'integer'
			|| $(itemid).getAttribute('columnType') == 'float') {
		tckGroups.items.push(new Ext.form.Checkbox({ // 以上相同
			id : 'tck1',
			boxLabel : '类型校验',
			name : 'tck1',
			inputValue : '2',
			listeners : {
				check : function(checkbox, checked) {
					if (checked) {

					}
				}
			}
		}));
	}

	var form = new Ext.FormPanel({
				labelWidth : 100, // label settings here cascade unless
				frame : false,
				bodyStyle : 'border:0px; padding:5px;',
				width : 450,
				defaults : {
					width : 300
				},
				defaultType : 'textfield',

				items : [{
							fieldLabel : '资产属性',
							name : 'tprop',
							readOnly : true,
							value : lbl
						}, {
							fieldLabel : '关联字段',
							name : 'cname',
							readOnly : true,
							value : $(itemid).getAttribute('columnName')
						}, {
							fieldLabel : '字段类型',
							name : 'ctype',
							readOnly : true,
							value : $(itemid).getAttribute('columnType')
						}, {
							fieldLabel : '关联数据表',
							name : 'tname',
							readOnly : true,
							value : $(itemid).getAttribute('tableName')
						}, {
							fieldLabel : '备注内容',
							xtype : 'textarea',
							name : 'tmemo'
						}, {
							fieldLabel : '特殊参数',
							xtype : 'textarea',
							name : 'tparam'
						}, tckGroups]
			});

	var idx = $(itemid).getAttribute('idx');

	var win = new Ext.Window({
				title : '模板项详细设置',
				layout : 'fit',
				items : [form],
				plain : true,
				modal : true,
				width : 500,
				height : 400,
				listeners : {
					'show' : function() {
						form.getForm().findField('tmemo')
								.setValue($('COLUMNMEMO_' + idx).value);
						form.getForm().findField('tparam')
								.setValue($('COLUMNOTHER_' + idx).value);
						if ($('COLUMNCHK1_' + idx).value == 1) {
							Ext.get('tck0').dom.checked = true
						}

						if ($('COLUMNCHK2_' + idx).value == 1) {
							Ext.get('tck1').dom.checked = true
						}
					}
				},
				buttons : [{
					text : '确定',
					handler : function() {
						$('COLUMNMEMO_' + idx).value = form.getForm()
								.findField('tmemo').getValue();
						$('COLUMNOTHER_' + idx).value = form.getForm()
								.findField('tparam').getValue();

						if (Ext.get('tck0').dom.checked == true) {
							$('COLUMNCHK1_' + idx).value = '1';
						} else {
							$('COLUMNCHK1_' + idx).value = '0';
						}

						if (Ext.get('tck1') && Ext.get('tck1').dom.checked == true) {
							$('COLUMNCHK2_' + idx).value = '1';
						} else {
							$('COLUMNCHK2_' + idx).value = '0';
						}

						win.close();
						win = null;
					}
				}, {
					text : '取消',
					handler : function() {
						win.close();
						win = null;
					}
				}]
			});

	win.show(this);
}

var c = 0;

/**
 * 添加模板项
 * 
 * @param {}
 *            tn 模板项所属表
 * @param {}
 *            area 模板项所属区域
 */
function returnSelectedItem(tn, area, lbl, propkey) {
	var rows = Ext.getCmp(tn).getSelectionModel().getSelections();

	if (rows.length > 0) {
		for (var i = 0; i < rows.length; i++) {
			var name = rows[i].data.name;
			var memo = rows[i].data.memo;
			var tp = rows[i].data.tp;

			var itemid = tn + '.' + name;

			templateItemMap.put(itemid, '1');

			str = '<table width="98%" border="0" align="center" id="' + itemid
					+ '" idx="' + c + '" tn="' + tn + '" tnLabel="' + lbl
					+ '" columnName="' + name + '" tableName="' + tn
					+ '" columnType="' + tp + '">';
			str += '<tr>';
			str += '<td width="10%" align="center">';
			str += '<img src="'
					+ context
					+ '/app/gdzc/images/remove.png" alt="删除模板项" style="cursor:hand;" onClick="javascript:removeItem(\'div_'
					+ c + '\', \'' + itemid + '\');">';
			str += '&nbsp;<img src="'
					+ context
					+ '/app/gdzc/images/edititem.png" alt="详细设置" style="cursor:hand;" onClick="javascript:editItem(\''
					+ itemid + '\', \'' + lbl + '\');">';
			str += '</td>';
			str += '<td width="30%" align="left">&nbsp;显示名称<br/>'
			str += '&nbsp;<input style="width:90%" type="text" name="COLUMNLABEL_'
					+ c + '" value="">';
			str += '<input type="hidden" name="PROPKEY_' + c + '" value="'
					+ propkey + '">';
			str += '<input type="hidden" name="PROPLABEL_' + c + '" value="'
					+ lbl + '">';
			str += '<input type="hidden" name="COLUMNNAME_' + c + '" value="'
					+ name + '">';
			str += '<input type="hidden" name="COLUMNTYPE_' + c + '" value="'
					+ tp + '">';
			str += '<input type="hidden" name="TABLENNAME_' + c + '" value="'
					+ tn + '">';
			str += '<input type="hidden" name="COLUMNMEMO_' + c + '" value="">';
			str += '<input type="hidden" name="COLUMNCHK1_' + c + '" value="">';
			str += '<input type="hidden" name="COLUMNCHK2_' + c + '" value="">';
			str += '<input type="hidden" name="COLUMNCHECK_' + c
					+ '" value="">';
			str += '<input type="hidden" name="COLUMNOTHER_' + c
					+ '" value="">';
			str += '</td>';
			str += '<td width="30%" align="left">&nbsp;默认值<br/>';
			str += '&nbsp;<input style="width:90%" type="text" name="COLUMNDVALUE_'
					+ c + '" value="">';
			str += '</td>';
			str += '<td width="30%" align="left">&nbsp;类型<br/>';
			str += '&nbsp;<select style="width:95%" name="ITEMTYPE_' + c + '">'
					+ getItemOptions(tn, tp) + '</select>';
			str += '</td>';
			str += '</tr>';
			str += '</table>';

			var o = $(area);

			var bindObject = document.createElement("div");
			bindObject.id = "div_" + c;
			bindObject.setAttribute("_id", c);
			bindObject.className = "DragBox";

			bindObject.innerHTML = str;

			o.appendChild(bindObject);

			c++;

			CreateDragContainer(o);
		}
	}
}

/**
 * 删除模板项
 * 
 * @param {}
 *            divid
 * @param {}
 *            itemid
 */
function removeItem(divid, itemid) {
	$(divid).parentNode.removeChild($(divid));

	templateItemMap.remove(itemid);
}

/**
 * 删除模板项
 * 
 * @param {}
 *            divid
 * @param {}
 *            itemid
 * @param {}
 *            id
 */
function removeItem1(divid, itemid, id) {
	deleteTable('APP_GDZC_TEMPITEM', 'single', '-1', function() {
				createHidden('ITEMID', id);
				return true;
			}, function() {
				$(divid).parentNode.removeChild($(divid));

				templateItemMap.remove(itemid);
			});
}